// 单行注释
/*
    多行注释，多行注释不能嵌套
*/

// 基础语法 + DOM + BOM
// 定义一个变量
// 小学学的未知数? 设 x = 5; z = 20; y是x和z的乘机，求y  y = x * z = 100;

// 语法
// var 变量名 = 值;

var a = 20;
var b = 30;
var c = a + b;
// 弹框
// alert(c);

// 浏览器控制台输出内容
console.log(c);

// 变量名命名规范
// 1. 由数字，字母，下划线，$组成，而且数字不能开头 a5正确，但5a不正确
// 2. 见名知意
// 3. 驼峰命名法： 小驼峰(第一个单词的首字母小写，其余单词首字母大写) 大驼峰(所有单词首字母大写)
// var 5a = 20;
var a5 = 20;
var $a = 5;
// alert($a);

// 苹果数量
var appleCount = 20;

// 姓名
var name = "小明";

// 年龄
var age = 19;

// 分数
var score = 100;

var redDiv = "红色的div";


// 算术运算符 + - * / %
a = 21;
b = 5;
c = a + b;
console.log(c);

c = a - b;
console.log(c);

c = a * b;
console.log(c);

c = a / b;
console.log(c);

// 取余运算
c = a % b;
console.log(c);

// 自增++，自减--
a = 5;
// a++;
++a;
console.log(a);

// ++在前取新值，++在后取旧值
a = 5;
console.log(a++); // a = 6
console.log(++a); // a = 7
console.log(a);

a = 5;
// a--;
// --a;
// console.log(a);
// console.log(a--);
// console.log(--a);
console.log(a--);
console.log(--a);
console.log(a);

a = 5;
b = 6;
c = a++ + ++a - b-- + --b;
console.log(a);
console.log(b);
console.log(c);

a = 5;
b = 6;

// 左结合性
c = a+++a---b---b--;

// c = 5 + 7 - 5 - 4;
// c = a++ + a-- - b-- - b--;
console.log(c);

// 自增(自减)运算符在前取新值，自增(自减)运算符在后取旧值，不管自增运算符在前还是在后变量都会+1(-1)

// 赋值运算符 =
a = 5;

// 复合赋值运算符
a += 2; // a = a + 2;
console.log(a);

a -= 2; // a = a - 2;
console.log(a);

a /= 2; // a = a / 2;
console.log(a);

a = 5;
a %= 2; // a = a % 2;
console.log(a);
 
// 比较运算符 >, <, >=, <=, ==, !=, ===, !==

// 表达式由变量 常量 运算符组成，都有一个结果; 例如: 5, a + 2; a + b; a > b;
a = 5;
b = 3;
// 比较运算都有一个布尔类型的返回值, 布尔类型有两个值true(真), false(假)
var r = a > b;
console.log(r);

r = a < b;
console.log(r);

r = a >= b;
console.log(r);

r = a <= b;
console.log(r);

// js中常用的数据类型
// 数字类型 number
a = 5;
b = 1.5;
console.log(typeof a, typeof b);

// 字符串类型 string, 用单引号或者双引号引起来的内容
a = "hello";
b = 'world';
console.log(typeof a, typeof b);

// 双引号不能直接嵌套双引号，单引号中不能直接嵌套单引号, 可以通过转义字符添加
// a = "hello, "wolrd"";
a = "hello, \"world\"";
console.log(a);

a = 'hello, "world"';
console.log(a);

// 布尔类型 boolean 只有true和false
r = 5 > 3;
console.log(typeof r);

// undefiend;
// 声明一个变量 undefined, 没有赋初值
var d;
console.log(typeof d);

// object（对象）类型
var arr = [1, 2, 3];
console.log(typeof arr);

// NaN (not a number) 不是数字的数字类型
a = 1 * "abc";
console.log(a);
console.log(typeof a);

a = 5;
b = "5";
// 不会比较类型
console.log(a == b);
// 会比较类型
console.log(a === b);

console.log(a != b);
console.log(a !== b);

console.log(a != a);


// NaN唯一一个和自己不相等的值 (1 * "abc", 2 * "abc")
a = NaN;
console.log(a != a);

// null是空值，类型是object
a = null;
console.log(typeof a);
console.log(null == null);































